iT邦幫忙

2022 iThome 鐵人賽

DAY 10
0

另一種也很直覺的切方方式是 Round-Robin Sharding,簡單來說就是輪流分配,假設有三台主機,將資料輪流分配到第一、二和三號主機上;若有五台主機,則輪流分配到第一、二、三、四和五號主機上,以此類推。這樣的設計讓計算很簡單,直接除以節點數量取餘數的方式,就可以知道每筆資料會被分配在哪一個節點上。

https://ithelp.ithome.com.tw/upload/images/20220912/2015113750ZMIo9QsB.png

https://ithelp.ithome.com.tw/upload/images/20220912/20151137ecBuQZyVAB.png

由於現實資料通常不會像上圖一樣那麼平均分布,例如:1、2、5、8、14、17、20、21、23 直接用同樣的方式切分在3台主機時,DB 2 號負擔明顯多過其他兩台。

https://ithelp.ithome.com.tw/upload/images/20220912/20151137pfBdWANIbw.png

為了處理這種情況,針對資料先進行 Hash 後再切分到多台主機上,透過挑選符合資料特性的 Hash 函式,就可以達到平均切分的效果。

https://ithelp.ithome.com.tw/upload/images/20220912/20151137lDN28aB1xs.png

Round-Robin 的切分方式的好處是它可以確保資料平均分布在各個節點,但需要注意當節點數量異動的成本高昂,很可能為了搬遷資料將所有資源耗盡,無法進行其他運算,因此不適合在節點數量變動頻繁的系統中使用這種設計。以下圖為例,當今天節點數量從 5 個變為 4 個時,有高達 60% 的資料都需要被搬遷。

https://ithelp.ithome.com.tw/upload/images/20220912/20151137sDDfGRqL42.png


上一篇
[Day 9] Range-based Sharding
下一篇
[Day 11] Consistent Hashing 一致性雜湊
系列文
NoSQL: Not Only SQL30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言